"""
发布方实现:
  步骤：
      1,包含头文件：
      2,初始化ROS2客户端
      3,定义节点类；
        3-1,创建发布方；
        3-2,创建定时器；
        3-2,组织消息并发布；
      4,调用spin函数,并传入节点对象指针；
      5,释放资源
"""

#1.导包
import rclpy #ros2基本函数的命名空间入口
from rclpy.node import Node #ros2的py节点类
from std_msgs.msg import String


#3.定义节点类
class Talker(Node):
    #初始化函数
    def __init__(self):
        super().__init__('talker_node_py') #继承父类Node节点,初始化节点名称
        # 3-1,创建发布方；
        self.publishers_ = self.create_publisher(String,'topic',10)
        # 3-2,创建定时器；
        timer_period = 0.5 #定时器周期
        self.timer_ = self.create_timer(timer_period,self.timer_callback)
        self.i = 0

    # 3-3,组织消息并发布；
    def timer_callback(self):
        msg = String() #获取字符串对象
        msg.data = 'hello world(py):%d' % self.i
        self.publishers_.publish(msg)
        self.get_logger().info("发布的消息是:%s" % msg.data)
        self.i +=1

#初始化
def main(args = None):
    # 2,初始化ROS2客户端
    rclpy.init(args = args)
    
    # 4,调用spin函数,并传入节点对象；
    talker = Talker()
    rclpy.spin(talker)
    # 5,释放资源
    rclpy.shutdown()

if __name__ == "__main__":
    main()